package test

import basedemo.Car
import list.MyTask

/**
 * Groovy内置了一个基于Junit的单元测试框架,
 * 继承GroovyTestCase就可以方便测试
 */
class DemoTest extends GroovyTestCase {
    def car
    //测试开始之前初始化
    void setUp() throws Exception { car=new Car(500,2019) }
    //测试结束清理复位
    void tearDown() throws Exception {}
    void test01(){
        def list=[1,2]
        assertEquals(2,list.size())
    }
    void test02(){
        assertEquals(2019,(int)car.year)
    }
    //Junit方式测试异常
    void test03(){
        try {
            car.year=2018
            fair "测试失败"  //进入fair方法失败
        } catch (Exception e) {//进入异常成功，否则进入fair
            assertTrue true
        }
    }
    //groovy提供shouldFail方法，可直接测试异常
    void test04(){
        //可在参数中指定具体异常
        shouldFail(ReadOnlyPropertyException) { car.year=2018 }
    }

    void test05(){
        //使用覆盖子类测试
        def test = new MyTaskTest()
        test.getResult()
        assertEquals 35, test.count //断言新属性
    }
}
class MyTaskTest extends MyTask {
    def count //属性名不能使用result,因为方法名getSomething的话,somthing默认是方法的返回值
    int execTask() {25}//取消耗时操作,模拟结果
    //覆盖println方法
    def println(value){ count=value } //打印值赋值新属性
}
